﻿using System;
using System.Web.Services;
using DCS.Domain;
using DCS.Domain.Entities;

namespace DCS.Service.Interfaces
{
    /// <summary>
    /// Методы, необходимые для работы вычислительного клиента.
    /// </summary>
    public interface ICalcClientMethods
    {
        /// <summary>
        /// Возвращает данные о зависимостях задачи.
        /// </summary>
        /// <param name="taskGuid"> Идентификатор задачи. </param>
        /// <returns> Массив зависимостей задачи. </returns>
        [WebMethod]
        Dependency[] GetTastDependencies(Guid taskGuid);

        /// <summary>
        /// Регистрирует вычислительный клиент.
        /// </summary>
        /// <param name="clientGuid"> Идентификатор клиента. </param>
        /// <param name="hardwareDescription"> Параметры клиетнского компьютера. </param>
        /// <returns> Идентификатор клиента для работы на сервисе. </returns>
        [WebMethod]
        Guid RegisterClient(ComputationalClient client);

        /// <summary>
        /// Возвращает порцию задачи.
        /// </summary>
        /// <param name="client"> Идентификатор клиента, запрашивающего данные. </param>
        /// <returns> Структура, содержащая необходимые для расчёта порции данные. </returns>
        [WebMethod]
        TaskPack GetTaskPortion(Guid client);

        /// <summary>
        /// Устанавливает результат рассчёта порции задачи.
        /// </summary>
        /// <param name="result"> Результат рассчёта. </param>
        /// <param name="client"> Идентификатор клиента. </param>
        [WebMethod]
        void SetPortionResult(TaskPortionResult result, Guid client);
    }
}
